package reflex;

import java.io.InputStream;
import java.lang.reflect.Method;
import java.util.Properties;

/**
 * @time: 2019/12/4 13:34
 * @author: baozi
 * 反射例子
 */
public class reflexDemo1 {


    public static void main(String[] args) {
        //Class.forName("全类名")
        //类名.class
        //对象.getClass（）

        //更具反射获取类
        try {

           // Class cla= Class.forName("stream.streamDemo1");
            /*Field[] a=cla.getFields();//获取public 的成员变量
            Field[] b=cla.getDeclaredFields();//获取所有成员变量*/
           /* Constructor constructor=cla.getConstructor(String.class);//获取构造方法
            Object ob=constructor.newInstance("name");//使用构造方法
            Method method=cla.getMethod("ccc",String.class);//获取public的方法,参数方法名字,方法参数类型
            System.out.println(cla);
            System.out.println(new streamDemo1().getClass());
            System.out.println(streamDemo1.class);*/

            Properties p=new Properties();
            //加载配置文件，转换为集合,后去class目录下的配置文件

            ClassLoader classLoader=reflexDemo1.class.getClassLoader();
            InputStream is=classLoader.getResourceAsStream("pro.properties");
            p.load(is);

            //配置文件定义的数据
            String className= p.getProperty("className");//类名字
            String methodName= p.getProperty("methodName");//方法名字
            //类加载到内存
            Class cs=Class.forName(className);
            //创建对象，无参构造
            Object obj=cs.newInstance();
            //获取方法，执行
            Method method=cs.getMethod(methodName);
            method.invoke(obj);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
